import tqdm
from dotenv import load_dotenv
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.memory import InMemorySaver
from paragraph_write_agents.uilts.paragraph_state import ParagraphState,ReportState
from paragraph_write_agents.uilts.paragraph_nodes import (
    paragraph_select,fill_text_paragraph, fill_data_paragraph, fill_summary_datagraph,route_paragraph
)


def build_graph() -> StateGraph:
    g = StateGraph(ParagraphState)
    g.add_node("paragraph_select", paragraph_select)
    g.add_node("fill_text_paragraph", fill_text_paragraph)
    g.add_node("fill_data_paragraph", fill_data_paragraph)
    g.add_node("fill_summary_datagraph", fill_summary_datagraph())
    g.set_entry_point("paragraph_select")

    # 根据 paragraph_outline 条件路由到对应节点
    g.add_conditional_edges(
        "paragraph_select",
        route_paragraph,
        {
            "fill_text_paragraph": "fill_text_paragraph",
            "fill_data_paragraph": "fill_data_paragraph",
            "fill_summary_datagraph": "fill_summary_datagraph",
            "其他":"fill_text_paragraph"
        },
    )
    # 每个节点结束后直接终止
    g.add_edge("fill_method", END)
    g.add_edge("fill_data_paragraph", END)
    g.add_edge("fill_summary", END)
    return g


def run_agent(paragraph_outline: str, provider: str = "deepseek") -> ParagraphState:
    load_dotenv()
    initial = {
        "paragraph_outline": paragraph_outline,
        "provider": provider,
        "messages": [],
        "user_input": "基于2024年最新发表的学术论文、专利申请和产业动态，生成人工智能领域前沿技术监测报告，重点分析大语言模型、计算机视觉、强化学习等细分方向的技术突破点，评估各技术路线的成熟度和发展前景，为科技政策制定提供决策支撑",
        "domain": "人工智能",
        "audience": "政府决策者"
    }
    checkpointer = InMemorySaver()
    graph = build_graph().compile(checkpointer=checkpointer)
    config = {"configurable": {"thread_id": "1"}}
    paragraph_state:ParagraphState = ParagraphState(**initial)
    state = graph.invoke(paragraph_state, config=config)
    return state


def clasifify_outlines():
    import pandas as pd
    load_dotenv()
    df = pd.read_csv("../data/test_data/data.csv")
    data = []
    for index,col in tqdm.tqdm(df.iterrows(),total=len(df)):
        try:
            outlines = col["outlines"]
            if outlines and outlines != 'None':
                outlines = eval(outlines)
                for outline in outlines:
                    try:
                        # 运行agent生成段落
                        initial = {
                            "paragraph_outline": outline,
                            "provider": "deepseek",
                        }
                        g = StateGraph(ParagraphState)
                        g.add_node("paragraph_select", paragraph_select)
                        g.set_entry_point("paragraph_select")
                        g.add_edge("paragraph_select", END)
                        g = g.compile()
                        paragraph_state: ParagraphState = ParagraphState(**initial)
                        state = g.invoke(paragraph_state)
                        paragraph_diagram = state['paragraph_diagram']
                    except:
                        paragraph_diagram = ''
                    insert_data = list(col) + [outline,paragraph_diagram]
                    data.append(insert_data)
        except:
            pd.DataFrame(data, columns=list(df.columns) + ['outline', 'paragraph_diagram']).to_excel(
                '../data/test_data/paragraphs_diagram.xlsx', index=False)
    pd.DataFrame(data,columns=list(df.columns)+['outline','paragraph_diagram']).to_excel('../data/test_data/paragraphs_diagram.xlsx',index=False)


if __name__ == "__main__":
    clasifify_outlines()


    # outlines = ['1. 引言：介绍人工智能领域前沿技术监测的背景、目的和意义，基于2024年学术论文、专利申请和产业动态数据，阐述报告对政府决策者在科技政策制定中的支撑作用，包括大语言模型、计算机视觉、强化学习等细分方向的分析框架。',
    # '2. 数据来源与处理方法：详细描述学术论文、专利申请和产业动态的数据收集、清洗和预处理方法，包括使用文献计量学、专利分析工具和产业报告，确保数据代表性和准确性，为后续分析提供基础。',
    # '3. 人工智能领域总体趋势分析：运用时间序列分析和主题建模方法，基于2024年数据评估人工智能领域的整体发展态势，包括技术热点、增长率和区域分布，识别关键驱动因素和潜在风险。',
    # '4. 大语言模型细分方向技术突破点分析：针对大语言模型，采用内容分析和引文网络方法，从2024年学术论文和专利申请中提取技术突破点，如模型架构创新、多模态融合、伦理对齐等，结合产业动态评估实际应用进展。',
    # '5. 计算机视觉细分方向技术突破点分析：使用图像识别和语义分析方法，分析2024年计算机视觉领域的技术突破，包括目标检测、图像生成和实时处理等，通过专利数据和产业报告验证技术可行性和创新性。',
    # '6. 强化学习细分方向技术突破点分析：基于强化学习，采用模拟实验和算法比较方法，从2024年数据中识别技术突破点，如多智能体协作、样本效率提升和安全性增强，结合产业动态评估其在自动驾驶等领域的应用前景。',
    # '7. 技术路线成熟度评估：运用成熟度模型和专家评分法，对大语言模型、计算机视觉、强化学习等技术路线进行量化评估，基于2024年数据计算技术就绪水平、市场渗透率和研发投入，识别高成熟度和低成熟度领域。',
    # '8. 技术发展前景预测：采用趋势外推和场景分析方法，基于2024年数据预测各技术路线的未来发展趋势，包括潜在突破时间、市场规模和政策影响，为政府决策者提供中长期规划依据。',
    # '9. 政策建议与决策支持：综合前述分析，提出针对性的科技政策建议，如资金分配、法规制定和国际合作策略，使用SWOT分析和优先级排序方法，确保建议可操作且符合政府决策需求。',
    # '10. 结论与展望：总结报告主要发现，强调人工智能领域前沿技术的监测结果，展望未来研究方向和政策实施路径，基于2024年数据提出持续监测和改进建议。']
    #
    #
    #
    # # 打印最终的报告状态
    # print(f"\n报告生成完成！总共生成了 {len(report_state['paragraphs'])} 个段落")
    #
    # # 保存生成的报告到JSON文件
    # import json
    # import datetime
    #
    # timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    # filename = f'generated_report_{timestamp}.txt'
    #
    # with open(filename, 'w', encoding='utf-8') as f:
    #     for paragraph in report_state['paragraphs']:
    #         content = paragraph.get('paragraph_content', '未生成内容')
    #         f.write(content + '\n\n')
    #
    # print(f"报告已保存到文件: {filename}")